This invention relates generally to graphics or video engines commonly used in computer systems.
A graphics or video engine is responsible for processing or manipulating data received from a pixel source such as a processor, a graphics controller or other devices. The graphics/video engine takes the pixel data and operates on that pixel data in a variety of well known ways. For example, the color space of the pixel data may be converted using routine algorithms. Alternatively, the pixel data may be scaled to change the size of the displayed information, again using well known algorithms. Similarly, the pixel data may be subjected to composition effects such as blurring, contrasting or other distortions.
In the conventional process, pixels are generated and deposited into memory as a result of a drawing operation such as three dimensional or video based rendering. To impose additional transformations like color space conversion or scaling, these pixels are then typically fetched from memory by a “fetch” engine. The operation is imposed and the pixels are then written back to the same memory location. The imposition of the transformation is termed “active” because it requires an explicit fetch engine to be set up with the parameters of the operation.
Thus, when a number of transformations are involved with given pixel data, many fetch engines may be needed that have the redundant functionality of generating pixel addresses. The use of these fetch engines complicates the memory controller that must operate with all of the fetch engines contending for memory bandwidth.
The need to use the fetch engines may also reduce the available memory bandwidth because of the need for read-modify-write cycles when imposing filtering operations after rendering. Moreover, when multiple transformations are needed, the programmer must awkwardly impose the transformations by causing the fetch engine to manipulate the data between a memory location and the various transformation engines. In addition, there is no easy way to cause multiple transformations to occur in a serial fashion.
Thus, there is a need for better ways to impose transformations on pixel data in graphic/video engines.